/**
 * 公共方法接口
 */

/**
 *  比较 *当天/昨天/前天*的话，是不需要减的，所以默认定义成0,
 * @param timestamp
 * @param day
 * @returns {boolean}
 */
const compareDate = (timestamp, day = 0) => {
  // timestamp 为要传入的时间戳
  // day 为要减去的日子 因为比较*当天*的话，是不需要减的，所以默认定义成0,

  // 根据上面分析，有些需要参数`time`，有些不需要，所以使用一个函数来区分一下
  let newDate = (time = null) => {
    return time === null ? new Date() : new Date(time)
  }

  // 这里返回 比较后的值，比较成功，则返回`true`，失败则返回`false`
  return (newDate(timestamp).getDate() == newDate().getDate() - day) && (newDate(timestamp).getMonth() == newDate().getMonth()) && (newDate(timestamp).getYear() == newDate().getYear())
}

/**
 * 计算时间差 返回格式为xx天xx小时xx分钟
 * @param timestamp
 * @param day
 * @returns {boolean}
 */
const countTimeDifference = (startTime, endTime) => {
  var stime = Date.parse(new Date(startTime));
  var etime = Date.parse(new Date(endTime));
  // 两个时间戳相差的毫秒数
  var usedTime = etime - stime;
  // 计算相差的天数
  var days = Math.floor(usedTime / (24 * 3600 * 1000));
  // 计算天数后剩余的毫秒数
  var leave1 = usedTime % (24 * 3600 * 1000);
  // 计算出小时数
  var hours = Math.floor(leave1 / (3600 * 1000));
  // 计算小时数后剩余的毫秒数
  var leave2 = leave1 % (3600 * 1000);
  // 计算相差分钟数
  var minutes = Math.floor(leave2 / (60 * 1000));
  var time = days + "天" + hours + "时" + minutes + "分";
  return time;
}

/**
 * 判断2个时间有没有超过多长时间
 * endTime - startTime < figures 返回 true
 * @param startTime
 * @param endTime
 * @returns {boolean}
 */
const isTimeDifference = (startTime, endTime, unit, figures) => {
  var stime = Date.parse(new Date(startTime));
  var etime = Date.parse(new Date(endTime));
  // 两个时间戳相差的毫秒数
  var usedTime = etime - stime;
  switch(unit){
    case 'D':{
      return Math.floor(usedTime / (24 * 3600 * 1000)) < figures;
    }
    case 'H':
      // 比对小时
      return Math.floor(usedTime / (3600 * 1000)) < figures;
    case 'M':
      // 比对分钟
      return Math.floor(usedTime / (60 * 1000)) < figures;
    case 'S':
      // 比对分钟
      return Math.floor(usedTime / (1000)) < figures;
    default:
      // 比对毫秒
      return Math.floor(usedTime) < figures;
  }
}


export { compareDate,
    countTimeDifference,
        isTimeDifference };
